#include "cpu.h"
#include "systick.h"
#include "Drv_led.h"
#include "Drv_key.h"
#include "Drv_Uart.h"
#include "Drv_OLED.h"

// App层代码
#include "App_key.h"
#include "App_DAC.h"
#include "debug.h"
#include "Version.h"
#include "App_OLED.h"


// 系统初始化
static void SysInit(void);
// 驱动初始化
static void DrvInit(void);

uint8_t Title0[] = "Range: 4-20 mA";
uint8_t Title1[] = "Value:";

int main()
{
	char strTmp[30] = { 0 };
	// 系统初始化
	SysInit();
	// 外设驱动初始化
	DrvInit();
	
	// 打印开机信息和版本信息
	const char *pVersion = GetVersion();
	p_info("%s", pVersion);
	
	DAC_SetOutputVoltage(0.4); // 默认设置输出4mA
	
	OLED_ClearRAM();
	OLED_ShowStr(0, 0, (uint8_t *)Title0, TextSize_8x16);
	OLED_ShowStr(0, 18, (uint8_t *)Title1, TextSize_8x16);
	sprintf(strTmp, "%.2lf mA", DAC_GetVoltage() * 10);
	OLED_ShowStr(7*8 + 1, 18, (uint8_t *)strTmp, TextSize_8x16);
	
	while(1)
	{
		// 按键扫描处理
		Key_EventHandle();
	}
}

// 系统初始化
void SysInit(void)
{
	HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2); // 配置中断优先级分组
	SystemClock_Config(); // 配置时钟树
	SystickInit(); // 初始化systick
}

// 驱动初始化
void DrvInit(void)
{
	Uart_DrvInit(115200); // 调试串口初始化
	DebugLevelInit(IOT_LOG_LEVEL_ERROR); // 初始化日志和调试组件
	LedDrvInit(); // LED初始化
	KeyDrvInit(); // 按键初始化
	DAC_AppInit(); // 初始化DAC
	OLED_DrvInit(); // 初始化OLED
}
